﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.ComponentModel;

namespace PSE.Tools.ProjectDependencyDiscovery
{
	public class Solucao
	{
		/// <summary>
		/// Nome do arquivo da Solucao
		/// </summary>
		private string nome;
		public string Nome
		{
			get { return nome; }
			set { nome = value; }
		}

		/// <summary>
		/// Caminho Completo do Arquivo da Solucao 
		/// </summary>
		private string nomeCompleto;
		public string NomeCompleto
		{
			get { return nomeCompleto; }
			set { nomeCompleto = value; }
		}

		/// <summary>
		/// Lista de Projetos contidos na Solucao
		/// </summary>
		private BindingList<Projeto> projetos;
		public BindingList<Projeto> Projetos
		{
			get { return projetos; }
			set { projetos = value; }
		}

		/// <summary>
		/// Lista de dependencias da Solucao.
		/// Representam as solucoes que precisam ser compiladas antes desta Solucao
		/// </summary>
		private BindingList<Solucao> dependencias;
		public BindingList<Solucao> Dependencias
		{
			get { return dependencias; }
			set { dependencias = value; }
		}

		/// <summary>
		/// Determina a Altura da Solucao na arvore de dependencias
		/// </summary>
		private int altura;
		public int Altura
		{
			get { return altura; }
			set { altura = value; }
		}

		/// <summary>
		/// Corresponde ao pai da Solucao na arvore de dependencias
		/// </summary>
		private BindingList<Solucao> pai;
		public BindingList<Solucao> Pai
		{
			get { return pai; }
			set { pai = value; }
		}

		/// <summary>
		/// Flag que auxilia no processo de determinacao da sequencia de Build
		/// Quando a Solucao pode ser Compilada esta Flag eh atribuida para true
		/// </summary>
		private Boolean resolvido;
		public Boolean Resolvido
		{
			get { return resolvido; }
			set { resolvido = value; }
		}

		/// <summary>
		/// Flag que auxilia no processo de determinacao da sequencia de Build
		/// Conta a quantidade de filhos Resolvidos desta Solucao
		/// </summary>
		private int dependenciasResolvidas;
		public int DependenciasResolvidas
		{
			get { return dependenciasResolvidas; }
			set { dependenciasResolvidas = value; }
		}

		/// <summary>
		/// Metodo que incrementa a variavel dependenciasResolvidas
		/// </summary>
		public void ResolverDependencia()
		{
			this.dependenciasResolvidas++;
		}
	}
}
